package io;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * 缓冲字符输入流:java.io.BufferedReader
 * 缓冲字符输入流内部默认有一个8192长的char数组，总是以块读方式保证读取效率
 * 缓冲字符输入流可以按行读取字符串
 */
public class BRDemo {
    public static void main(String[] args) throws IOException {
        //读取当前源代码
        FileInputStream fis = new FileInputStream("./src/main/java/io/BRDemo.java");
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        /*
            String readLine()
            读取一行字符串，返回的字符串不含有这一行最后的换行符。
            如果返回值为null表示流读取到了末尾

            readLine第一次调用时，缓冲流会一次性读取默认8192个字符回来，并存入内部的char
            数组中，然后从数组第一个字符开始连续扫描字符，直到换行符停止，然后将之前内容以
            一个字符串返回。
            当第二次调用readLine方法时，会从上次停止的位置开始继续向后扫描字符，直到换行符
            位置，然后将扫描的字符以字符串形式返回，以此类推。当全部扫描后会再次读取8192个字符(
            再次块读数据)

            readLine方法返回值的几种现象:
            1:正常返回一行字符串内容(正常读取了一行数据)
            2:空字符串(如果这一行是空行，只有一个换行符)
            3:null(流读取到了末尾)

         */
        String line;
        while((line = br.readLine()) != null){
            System.out.println(line);
        }

        br.close();
    }
}
